/**
 * @file encoder.c
 * @brief 编码器驱动实现
 * @author 废话文学创始人
 * @version 1.0
 * @date 2024-07-14
 */

#include <encoder.h>

/**
 * @brief 编码器的初始化
 * @note 启动定时器编码器模式
 */
void Encoder_init(void)
{
    HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
}

/**
 * @brief 读取编码器当前计数值（不清零）
 * @return 当前编码器计数值（无符号16位）
 */
uint16_t Encoder_Read(void)
{
    return __HAL_TIM_GET_COUNTER(&htim3);
}

/**
 * @brief 读取编码器计数值并清零
 * @return 当前编码器计数值（有符号16位），读取后计数器清零
 */
int16_t Encoder_Read_and_clear(void)
{
    int16_t count = __HAL_TIM_GET_COUNTER(&htim3);
    __HAL_TIM_SET_COUNTER(&htim3, 0);
    return count;
}